package helloworld;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * helloworld.Provider
 * 生产者
 * @author 丛有志
 * @date 2020/11/18 9:12
 * <p>
 * 版本        修改时间        作者        修改内容
 * V1.0        2020/11/18     丛有志        初始版本
 */
public class Provider {

    @Test
    public void testSendMessage() throws IOException, TimeoutException {
        // 创建rabbitmq连接工厂对象
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 连接rabbitmq主机
        connectionFactory.setHost("localhost");
        // 设置端口
        connectionFactory.setPort(5672);
        // 设置连接虚拟机
        connectionFactory.setVirtualHost("/ems");
        // 设置访问虚拟主机的用户名
        connectionFactory.setUsername("ems");
        // 设置用户名密码
        connectionFactory.setPassword("ems");
        // 获取连接对象
        Connection connection = connectionFactory.newConnection();
        // 获取连接通道
        Channel channel = connection.createChannel();
        // 通道绑定消息队列
        // 参数1:队列名称 如果不存在，自动创建
        // 参数2:用来定义队列特性是否持久化,false不持久
        //【例】自动创建的队列，无论mq重启之后一直存在，若为false则在重启之后删除
        // 参数3:exclusive 是否独占，若为false则表示当前连接可以被其他连接可用
        // 参数4:autoDelete:是否在消费完成之后自动删除队列，true自动删除，false不自动删除
        // 参数5:额外附加参数
        channel.queueDeclare("hello",false,false,false,null);
        // 发布消息
        // 参数1：交换机名称-若无则为空
        // 参数2: 队列名称=>往hello队列推送消息
        // 参数3：发布消息时属相传递消息的额外设置
        // 参数4:发布消息具体内容
        channel.basicPublish("","hello",null,"hello World rabbitmq".getBytes());
        // 关闭通道
        channel.close();
        // 关闭连接
        connection.close();

    }




}
